package com.itheima.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.dao.FeedBackMapper;
import com.itheima.pojo.Feedback;
import com.itheima.service.FeedBackService;
import com.itheima.vo.FeedbackVo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Service
public class FeedBackServiceImpl implements FeedBackService {
    @Autowired
    private FeedBackMapper feedBackMapper;

    /**
     * 批量删除反馈
     * @param feedbackVOList
     */
    @Override
    @Transactional
    public void deleteBatch(List<FeedbackVo> feedbackVOList) {
        //判断传过来的集合是否为空
        if (feedbackVOList == null) {
            return;
        }
        //不为空就遍历集合 删除反馈
        for (FeedbackVo feedbackVO : feedbackVOList) {
            Feedback feedback = new Feedback();
            BeanUtils.copyProperties(feedbackVO,feedback);
            feedBackMapper.deleteByPrimaryKey(feedback);
        }
    }

    /**
     * 查询反馈
     * @param feedbackVO 查询条件
     * @return
     */
    @Override
    public PageInfo<Feedback> list(FeedbackVo feedbackVO) {
        //判断查询条件是否为空
        if (feedbackVO==null){
            //为空就直接查询所有反馈
            List<Feedback> feedbacks = feedBackMapper.selectAll();
            return new PageInfo<>(feedbacks);
        }
        //不为空就创建条件对象
        Example example = new Example(Feedback.class);
        //判断map条件集合中是否含有当前页和页面大小两个属性
        if ( feedbackVO.getCurrentPage()!=null&& feedbackVO.getPageSize()!=null){
// 有就传入PageHelper.startPage方法中
        PageHelper.startPage( feedbackVO.getCurrentPage(),feedbackVO.getPageSize());
        }
        //创建添加条件对象
        Example.Criteria criteria = example.createCriteria();
        //判断map集合中title是否为空
        if (StringUtils.isNotEmpty(feedbackVO.getTitle())){
            //不为空就添加模糊查询条件
        criteria.andLike("title","%"+ feedbackVO.getTitle()+"%");
        }
        //判断反馈状态是否为空
        if (( feedbackVO.getFeedbackStatus()!=null)){
            //不为空就添加与map中的feedbackStatus匹配的条件
        criteria.andEqualTo("feedbackStatus",feedbackVO.getFeedbackStatus());
        }
        //通用mapper条件查询获取集合
        List<Feedback> feedBacks = feedBackMapper.selectByExample(example);
          //返回PageInfo对象
        return new PageInfo<Feedback>(feedBacks);
    }

    /**
     * 编辑反馈
     * @param feedbackVO  要编辑的反馈的部分属性
     */
    @Override
    @Transactional
    public void edit(FeedbackVo feedbackVO) {
        //创建反馈实体类对象Feedback  下面修改要用
        Feedback feedback = new Feedback();
        //需通过反馈uid和用户userUid来查询当前反馈然后修改
        //所有有如下判断
        if(feedbackVO.getUid()!=null&&!"".equals(feedbackVO.getUid())){
            feedback.setUid(feedbackVO.getUid());
        }
        if (feedbackVO.getUserUid()!=null&&!"".equals(feedbackVO.getUserUid())){
            feedback.setUserUid(feedbackVO.getUserUid());
        }
        //判断map中有没有这个属性值 有就修改没有就不修改
        if(feedbackVO.getTitle()!=null&&!"".equals(feedbackVO.getTitle())){
            feedback.setTitle(feedbackVO.getTitle());
        }
        //判断map中有没有这个属性值 有就修改没有就不修改
        if(feedbackVO.getStatus()!=null){
            feedback.setStatus(feedbackVO.getStatus());
        }
        //判断map中有没有这个属性值 有就修改没有就不修改
        if(feedbackVO.getReply()!=null&&!"".equals(feedbackVO.getReply())){
        feedback.setReply(feedbackVO.getReply());
        }
        //判断map中有没有这个属性值 有就修改没有就不修改
        if(feedbackVO.getFeedbackStatus()!=null){

        feedback.setFeedbackStatus(feedbackVO.getFeedbackStatus());
        }
        //判断map中有没有这个属性值 有就修改没有就不修改
        if(feedbackVO.getContent()!=null&&!"".equals(feedbackVO.getContent())){

        feedback.setContent(feedbackVO.getContent());
        }
        //设置修改的时间
        feedback.setUpdateTime(new Date());
        //通用mapper进行修改
        feedBackMapper.updateByPrimaryKey(feedback);
    }
}
